package csv0

import (
	"encoding/csv"
	"fmt"
	"log"
	"os"
	config0 "searcher/src/config"
	model0 "searcher/src/model"
)

var (
	sc config0.SimpleConfig
)

func ReadLine(writer model0.WriteDb) {
	csv_path := sc.GetCsvPath()
	fmt.Println(csv_path)

	// 打开 CSV 文件
	csv_file, err := os.Open(csv_path)
	if err != nil {
		log.Fatalf("无法打开文件: %v", err)
		return
	}
	defer csv_file.Close()

	// 创建 CSV 读取器
	reader := csv.NewReader(csv_file)

	// 设置读取器参数（可选）
	reader.Comma = ','       // 设置分隔符，默认为逗号
	reader.LazyQuotes = true // 允许不完整的引号

	// 逐行处理文件
	lineCount := 0
	n := 200        // 批量插入的数据条数
	nPrompt := 6000 // 向控制台输出提示信息
	var hifini200 []model0.Hifini
	for {
		record, err := reader.Read()

		// if lineCount >= 209 {
		// 	break
		// }

		if err != nil {
			if err.Error() == "EOF" {
				// 结束前
				// 调用`writer`保存数据到数据库
				writer.BatchSave(&hifini200)

				break // 正常结束
			}
			log.Fatalf("读取行失败: %v", err)

			lineCount++
			continue
		}

		lineCount++
		// 处理当前行数据

		// [谢雨欣《天仙子》[FLAC/MP3-320K] 华语
		// https://pan.baidu.com/s/1JVOTPniqJM5gQ4tMArsFQw ea4d
		// https://hifini.lanzn.com/iOSRO09408ob 31ea hifini_210001.html]
		var hifini model0.Hifini

		title := record[0]
		if title == "Title" {
			continue
		}

		hifini.Title = title
		hifini.MusicType = record[1]
		hifini.FirstLink = record[2]
		hifini.FirstCode = record[3]
		hifini.SecondLink = record[4]
		hifini.SecondCode = record[5]
		hifini.Origin = record[6]

		hifini200 = append(hifini200, hifini)

		if lineCount%nPrompt == 0 {
			fmt.Printf("已经写入%d条数据\n", lineCount)
		}

		if hifini200 != nil && len(hifini200) == n {
			// 调用`writer`保存数据到数据库
			// cloned := make([]model0.Hifini, len(hifini200))
			// copy(cloned, hifini200)

			// 【注意】调用这个方法前, 将数据克隆一份再传入;
			// 不用克隆也可以的! 报错不是这里的原因
			writer.BatchSave(&hifini200)

			// 赋值`nil`就相当于时重置了
			hifini200 = nil
		}

	}

	fmt.Printf("总共写入%d条数据\n", lineCount)

}
